package com.wolfeyes.web.controller.system;

import com.wolfeyes.common.response.ResponseResult;
import com.wolfeyes.system.domain.SysActor;
//import com.wolfeyes.system.domain.SysMovie;
import com.wolfeyes.system.service.impl.SysActorServiceImpl;
import com.wolfeyes.web.controller.BaseController;

import lombok.RequiredArgsConstructor;

//import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @url 一枚 架构师 也不会用的Lombok注解，相见恨晚：https://mp.weixin.qq.com/s/vo0GtYcJvZiLXHUP0AErvQ
 * @url 扯一把 Spring 的三种注入方式，到底哪种注入方式最佳？ - 江南一点雨：http://www.javaboy.org/2021/1022/spring_3_injected.html
 * @description Spring构造方法注入(DI)方式：如果类只有一个构造方法，那么 @Autowired 注解可以省略；
 * @description 如果类中有多个构造方法，那么需要添加上 @Autowired 来明确指定到底使用哪个构造方法。
 * @description Setter方法基本上用的人比较少，因为它更加臭更加长。要是给每一个属性写一个set方法，我估计你即使用代码生成器也玩吐了。
 * @description 那么，构造器的方法注入就成了我们的首选。Spring不需要加入其他注解，就可以使用构造器完成注入。问题是，我们依然要写很多代码。
 * @description 这个时候，你可能想到了Lombok的AllArgsConstructor注解。但它是针对于全部的属性的，如果类中有一些非Bean的属性，Spring就会晕菜。
 * @description 这个时候，就可以使用RequiredArgsConstructor了。我们把需要注入的属性，修改成final类型的（或者使用@NotNull注解，不推荐），这些
 * @description 属性将构成默认的构造器。Java要求final类型的属性必须要初始化，如果没有构造方法代码就会变红。我们可以看到修改之后的IDE，恼人的灰色提示也消失了。
 * @description 这样的代码，是非常简洁的。@RequiredArgsConstructor(onConstructor = @__(@Autowired))
 * @description 它的意思是，给使用Lombok生成的构造器方法，加入一个@Autowired注解。这是彻头彻尾的Lombok语法，不过现在的Spring已经不需要加入这样的注解就能运行了。
 * @see Talk is cheap, Show me the code. -- Linus Torvalds
 * @title 演员信息-控制器
 * @author yanyljava
 * @email yanyljava@qq.com
 * @create 2022-01-13 15:52
 */
@RestController
@RequiredArgsConstructor
public class SysActorController extends BaseController {
	
	//@Autowired
	private final SysActorServiceImpl sysActorService;

	@GetMapping("/sysActor")
	public ResponseResult findAll(SysActor sysActor) {
		startPage();
		List<SysActor> data = sysActorService.findAll(sysActor);
		
		return getResult(data);
	}

	@GetMapping("/sysActor/{id}")
	public ResponseResult findById(@PathVariable Long id) {
		
		return getResult(sysActorService.findById(id));
	}

	@PostMapping("/sysActor")
	public ResponseResult add(@Validated @RequestBody SysActor sysActor) {
		
		return getResult(sysActorService.add(sysActor));
	}

	@PutMapping("/sysActor")
	public ResponseResult update(@Validated @RequestBody SysActor sysActor) {
		
		return getResult(sysActorService.update(sysActor));
	}

	@DeleteMapping("/sysActor/{ids}")
	public ResponseResult delete(@PathVariable Long[] ids) {
		
		return getResult(sysActorService.delete(ids));
	}

	@GetMapping("/sysActor/find/{id}")
	public ResponseResult findActorById(@PathVariable Long id) {
		
		return getResult(sysActorService.findActorById(id));
	}
	
}


